package com.hedl.practice.diyJava.gather.study_set.test;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

/**
 * Set用于存储不重复的元素集合，它主要提供以下几个方法：
 *      将元素添加进Set<E>：boolean add(E e)
 *      将元素从Set<E>删除：boolean remove(Object e)
 *      判断是否包含元素：boolean contains(Object e)
 *
 * Set用于存储不重复的元素集合：
 *      放入HashSet的元素与作为HashMap的key要求相同；
 *      放入TreeSet的元素与作为TreeMap的Key要求相同；
 * 利用Set可以去除重复元素；
 * 遍历SortedSet按照元素的排序顺序遍历，也可以自定义排序算法。
 */
public class Main {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        Set<String> set1 = new TreeSet<>();

        System.out.println(set.add("abc"));     //true
        System.out.println(set.add("xyz"));     //true
        System.out.println(set.add("xyz"));     //false,添加失败，因为元素已存在
        System.out.println(set.contains("xyz"));        //true,元素存在
        System.out.println(set.contains("XYZ"));        //false,元素不存在
        System.out.println(set.remove("hello"));        //false,删除失败，因为元素不存在
        System.out.println(set.size());     //2


        /**
         * Set接口并不保证有序，而SortedSet接口则保证元素是有序的：
         *      HashSet是无序的，因为它实现了Set接口，并没有实现SortedSet接口；
         *      TreeSet是有序的，因为它实现了SortedSet接口。
         */
        System.out.println("=============================================================");
        //查看hashSet的输出
        set.add("apple");
        set.add("banana");
        set.add("pear");
        set.add("orange");
        for (String s : set) {
            System.out.println("Set无序序列："+s);
        }

        System.out.println("=============================================================");
        //TreeSet有序序列
        for (String s : set) {
            set1.add(s);
        }

        for (String s : set1) {
            System.out.println("TreeSet有序序列："+s);
        }
    }
}
